package com.smart.community.property.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 催缴/沟通记录状态枚举
 * 0-无效，1-有效，后续可扩展
 * 严格遵循《系统状态枚举权威标准声明.md》《智慧社区微服务架构总览.md》
 * @author Wu.Liang
 * @since 2025-07-22
 */
@Getter
@AllArgsConstructor
public enum ReminderStatusEnum {
    /**
     * 无效
     */
    INVALID(0, "无效"),
    
    /**
     * 有效
     */
    VALID(1, "有效");

    @JsonValue
    private final int code;
    private final String desc;

    /**
     * 根据代码获取枚举
     * @param code 状态代码
     * @return 状态枚举
     */
    public static ReminderStatusEnum fromCode(Integer code) {
        if (code == null) return null;
        for (ReminderStatusEnum value : values()) {
            if (value.code == code) return value;
        }
        return null;
    }

    /**
     * 根据代码获取描述
     * @param code 状态代码
     * @return 状态描述
     */
    public static String getDescByCode(Integer code) {
        ReminderStatusEnum status = fromCode(code);
        return status != null ? status.getDesc() : "未知";
    }

    /**
     * 检查是否为有效状态
     * @param code 状态代码
     * @return 是否为有效状态
     */
    public static boolean isValid(Integer code) {
        return VALID.getCode() == code;
    }

    /**
     * 检查是否为无效状态
     * @param code 状态代码
     * @return 是否为无效状态
     */
    public static boolean isInvalid(Integer code) {
        return INVALID.getCode() == code;
    }
    
    /**
     * Jackson反序列化方法
     * 严格遵循《系统状态枚举权威标准声明.md》规范
     * 
     * @param code 枚举值
     * @return 对应的枚举，如果不存在则返回null
     */
    @JsonCreator
    public static ReminderStatusEnum fromCodeForJackson(Integer code) {
        return fromCode(code);
    }
} 